84be9172bd9938c102978f842d63615cee4d0e92,src/main/java/com/continuuity/gateway/connector/AppFabricRestHandler.java,AppFabricRestHandler,handleFlowletOperation,#MessageEvent#HttpRequest#GatewayMetricsHelperWrapper#AppFabricService.Client#AuthToken#FlowIdentifier#String#Map#,386
Before Change
// looking for ?op=instances
List<String> operations = parameters.get("op");
if (operations == null || operations.size() == 0) {
LOG.trace("Parameter 'op' is missing.");
respondError(message.getChannel(), HttpResponseStatus.BAD_REQUEST);
metricsHelper.finish(BadRequest);
return;
} else if (operations.size() > 1) {
LOG.trace("More than one 'op' parameter specified.");
respondError(message.getChannel(), HttpResponseStatus.BAD_REQUEST);
metricsHelper.finish(BadRequest);
return;
} else if (operations.size() == 1 && !SUPPORTED_FLOWLET_OPERATIONS.contains(operations.get(0))) {
LOG.trace("Unsupported flowlet operation {}.", operations.get(0));
respondError(message.getChannel(), HttpResponseStatus.BAD_REQUEST);
metricsHelper.finish(BadRequest);
return;
}
if (request.getMethod() == HttpMethod.GET) { // retrieve number of flowlet instances
String flowDefJson = client.getFlowDefinition(flowIdent);
if (flowDefJson == null) {
LOG.error("Failed to get number of flowlet instances.");
respondError(message.getChannel(), HttpResponseStatus.INTERNAL_SERVER_ERROR);
metricsHelper.finish(Error);
return;
}
FlowDefinitionImpl flowDef = new Gson().fromJson(flowDefJson, FlowDefinitionImpl.class);
for (FlowletDefinition flowletDef : flowDef.getFlowlets()) {
if (flowletDef.getName().equals(flowletId)) {
byte[] response = Bytes.toBytes("{\"instances\":" + flowletDef.getInstances() + "}");
respondJson(message.getChannel(), request, HttpResponseStatus.OK, response);
metricsHelper.finish(Success);
return;
}
}
LOG.trace("Flowlet {} does not exist.", flowletId);
respondError(message.getChannel(), HttpResponseStatus.BAD_REQUEST);
metricsHelper.finish(BadRequest);
After Change
new InputStreamReader(new ChannelBufferInputStream(request.getContent()), Charsets.UTF_8);
Map<String, String> valueMap = new Gson().fromJson(reader, new TypeToken<Map<String, String>>() {}.getType());
if (valueMap.get("instances") == null) {
respondError(message.getChannel(), HttpResponseStatus.BAD_REQUEST,
"Parameter 'instances' is missing in JSON body of Http Request.", true);
metricsHelper.finish(BadRequest);
} else {
short numInstances = Short.parseShort(valueMap.get("instances"));